home *** CD-ROM | disk | FTP | other *** search
/ IRIS Performer 2.2 Friends Demo / SGI IRIS Performer 2.2 Friends Demo.iso / friends / devices / BGSystems / CerealBox / e_test.c < prev    next >
C/C++ Source or Header  |  1997-10-31  |  3KB  |  205 lines

  1. /*
  2.  * e_test.c
  3.  *
  4.  * Main routine for v3.0 test for LV824-E
  5.  *
  6.  * Copyright 1995 BG Systems 
  7.  *
  8.  * Author       Date        Comments
  9.  * John Green   15-Jan-95   Written
  10.  * John Green   01-Feb-95   Final tuning for rev 3.0
  11.  *
  12.  *
  13.  */
  14.  
  15. static char SccsId[] = "@(#)e_test.c    1.3 10 Feb 1995";
  16.  
  17. #include <stdio.h>
  18. #include <stdlib.h>
  19. #include <time.h>
  20. #include <signal.h>
  21.  
  22. #include <sys/schedctl.h>
  23. #include <sys/types.h>
  24. #include <sys/time.h>
  25.  
  26. #include "lv3.h"
  27.  
  28. void setup_lv(void );
  29. void init_timer(void );
  30. void rf_quit(void );
  31. void catcher(void );
  32. int ms_time(double *);
  33.  
  34. extern int open_lv(bglv *, char *, int );
  35. extern int init_lv(bglv *);
  36. extern int close_lv(bglv *);
  37.  
  38. extern int w_lv(int, char *);
  39. extern int r_lv(bglv *);
  40.  
  41. extern int check_rev(bglv *);
  42. extern int check_setup(bglv *);
  43.  
  44. bglv bgdata;
  45.  
  46. double start, now;
  47. struct itimerval itv;
  48.  
  49. /*
  50.  * main()
  51.  *
  52.  * This is where everything happens
  53.  *
  54.  */
  55.  
  56. main()
  57. {
  58.    int      st;
  59.    long     counter = 0;
  60.    int      i;
  61.    int      j;
  62.    char     inputs = 1;
  63.  
  64.  
  65.    setup_lv();
  66. #ifndef DEBUG
  67.    init_timer();
  68. #endif
  69.  
  70.    st = ms_time(&start);
  71.  
  72.    i = 0;
  73.    while(counter++ < 10000000)
  74.    {
  75.       st = w_lv(bgdata.sp_fd, "o");
  76.  
  77.       st = ms_time(&now);
  78. #ifdef DEBUG
  79.       sginap(3);
  80. #else
  81.       sigpause(SIGALRM);
  82. #endif
  83.  
  84.       st = r_lv(&bgdata);
  85.                   
  86.       if ( inputs && counter % 15 == 0)
  87.       {  
  88.          for ( j = 0; j < 8; j++ )
  89.          {
  90.             if ( bgdata.analog_in & 0x1 << j )
  91.                printf("%4.2f  ", bgdata.ain[j]); 
  92.          }
  93.  
  94.          for ( j = 0; j <=2; j++ )
  95.          {
  96.             if ( bgdata.dig_in & 0x10 << j )
  97.             {
  98.                for ( i = 0; i < 8; i++ )
  99.                {
  100.                   if ( (bgdata.din[j]>>i) & 0x1 )
  101.                      printf("1");
  102.                   else
  103.                      printf("0");
  104.                }
  105.                printf("  ");
  106.             }
  107.          }
  108.  
  109.          printf("\n");
  110.       }
  111.       if ( (counter % 200) == 0 )
  112.          printf("%7ld  Update rate = %5.2f Hz\n",
  113.                   counter, counter/(now-start) );
  114.    }
  115.  
  116.    printf("%ld transfers in %f sec.\n", counter, (now-start) );
  117.    printf("Update rate = %5.2f Hz\n", counter/(now-start) );
  118.  
  119.    exit(0);
  120. }
  121.  
  122.  
  123. void setup_lv()
  124. {
  125.    int st;
  126.    int i;
  127.    
  128. /*
  129.  * Defaults to 4 analog, and 8 discretes
  130.  */
  131.  
  132.    bgdata.analog_in = 0;
  133.    bgdata.analog_in = AIC1 | AIC2 | AIC4 | AIC8;
  134.  
  135.    bgdata.dig_in = 0;
  136.    bgdata.dig_in = DIC1 | DIC2 | DIC3;
  137.  
  138. /*
  139.  *  Set the baud rate
  140.  */
  141.    bgdata.baud    = BAUD192;
  142.  
  143. /*
  144.  *  Open the port & drivers
  145.  */
  146.    st = open_lv(&bgdata, "/dev/ttyd2", FB_NOBLOCK);
  147.    if (st < 0)
  148.    {
  149.       printf("Unable to open port\n");
  150.       exit(-1);
  151.    }
  152. /*
  153.  *  Send the init string
  154.  */
  155.    st = init_lv(&bgdata);
  156.    if ( st < 0 )
  157.    {
  158.       check_setup(&bgdata);
  159.       printf("Invalid setup requested.  Bye\n");
  160.       exit(-1);
  161.    }
  162. }
  163.  
  164. void catcher()
  165. {
  166. }
  167.  
  168. int ms_time(double *t)
  169. {
  170.    struct timeval tp;
  171.    struct timezone tzp;
  172.    int st;
  173.  
  174.    st = gettimeofday(&tp, &tzp);
  175.    *t = tp.tv_sec +  ((float)tp.tv_usec / 1000000.0);
  176.  
  177.    return(0);
  178. }
  179.  
  180. void rf_quit()
  181. {
  182.    int st;
  183.  
  184.    st = close_lv(&bgdata);
  185.    printf("Bye\n");
  186.    exit(0);
  187. }
  188.  
  189.  
  190. void init_timer()
  191. {
  192. /*
  193.  * Initialize the itimer
  194.  */
  195.    itv.it_interval.tv_sec = 0;
  196.    itv.it_interval.tv_usec = 20000;
  197.    itv.it_value = itv.it_interval;
  198.    setitimer(ITIMER_REAL, &itv, (struct itimerval *)0 );
  199.  
  200.    sigset(SIGALRM,  catcher);
  201.    sigset(SIGQUIT,  rf_quit);
  202.    sigset(SIGKILL,  rf_quit);
  203.    sigset(SIGINT,   rf_quit);
  204. }
  205.